Linux screen 工具
Shell 是什么
什么是 shell? shell 是用来解析命令的,它接受用户命令,然后调用相应的程序执行 shell 相当于一个翻译,翻译命令,让机器听懂
为什么要多个 shell? 每种 shell 都有不同的特点,按需求选择
主要分以下三种:
- shell:/bin/bash
- shell:/user/sbin/nologin 不可登陆的
- shell:/bin/sh
系统创建的用户(最开始创建虚拟机时创建的那个也算是系统创建的)默认是第一种 自己创建的用户默认使用第三个,不支持上下方向键
查看当前支持的所有的 shell
cat /etc/shells
临时切换 Shell
bash
永久修改当前用户的 Shell
# 可以直接输入:
bash # 临时时切换成 /bin/bash
# 使用 bash 模式输入命令:
chsh
# 再 在Login Shell [*] 后输入
/bin/bash
screen 和 nohup 区别?
如果想在关闭 ssh 连接后刚才启动的程序继续运行怎么办,可以使用 nohup。但是如果要求第二天来的时候。一开 ssh,还能查看到昨天运行的程序的状态,然后继续工作,这时 nohup 是不行了,需要使用 screen 来达到这个目的。
虽然 nohup 很容易使用,但还是比较“简陋”的,对于简单的命令能够应付过来,对于复杂的需要人机交互的任务就麻烦了
这时使用 screen 可以 ctrl + a 和 d 将进程挂到后台
这个 Screen 的本质原理就是,通过 Screen 这个程序代管用户的 Shell
安装 Screen
在 Ubuntu 里安装软件
apt-get install screen
在 CentOS 里安装软件
yum install screen #CentOS
然后进入 Screen 里面才能使用
# 输入 screen
screen
查看帮助:Ctrl + a 然后 按 ?
会话操作
如果要退出 SSH
ctrl + a 和 d 把这个线程挂载到后台 ⭐如果是直接退则是 ctrl + z(挂起)
Ctrl + a 然后按 c 创建一个新的运行 shell 的窗口并切换到该窗口 ⭐常用命令
# 新建一个窗口或者开启 Screen 进程(但是是无名的)
screen
# 新建一个名叫 yourname 的窗口,并马上进入(同上,只是可以自定义名字)
screen -S yourname # 可以使用快捷键 ctrl + a c
# 列出当前所有的session
screen -ls
# 重新进入之前已经创建的会话
screen -r yourname
# 如果想要删除这个 screen 两种方式:
# 1、Ctrl + a 然后按 Shift + k 杀死当前 Shell
# 2、激活 screen,并利用 exit 退出并 kill 掉session。
screen -r session_name
exit
#3、
screen -ls # 取得 ID 后再删除
screen -X -S 122128 exit # 或者 quit
# 查看 screen 版本号
screen -v
screen -r yourname #-> 回到yourname这个session
screen -d yourname #-> 远程detach某个session
screen -d -r yourname #-> 结束当前session并回到yourname这个session
screen -D -r yourname #-> 结束当前的session,并logout,再链接yourname这个session
# 关闭当前会话(所以先使用 screen -r 连接到会话,再使用exit关闭该会话)
# 或者使用 kill 会话 id 就可以关闭会话了
exit
常见的问题
Linux Screen 状态为 Attached 连不上无法恢复的解决方法
screen -D -r <session-id>
也就是在 -r 前面加个 -D,先踢掉之前登录的用户,然后我们就可以正常登录了。
窗口操作
Screen 不像其它的工具,它主要监听的是快捷键,具体操作如下:
Ctrl + a 然后按 c 创建一个新的运行 shell 的窗口并切换到该窗口 ⭐拆分窗口
Ctrl + a 然后 Shift + s 水平拆分Ctrl + a 然后 | 垂直拆分Ctrl + a 然后 Tab 切换分屏Ctrl + a 然后 shift + x 关闭当前分屏如果没有可操作界面则需要在这个窗口上使用 Ctrl + a n or p 切换到其他窗口,实际上就是默认切割成的是一个空窗口,需要把其他窗口挂载上来
Ctrl + a,然后 输入 `:resize 25` 调整窗口大小,这里 `:resize` 是命令切换窗口
ctrl + a ctrl + a 切换最近使用的窗口ctrl + a 然后按 shift + " 显示所有窗口列表Ctrl + a 然后按 0-9 切换到第 0..9 个 window (不是连着按,下同)Ctrl + a 然后按 n or p 切换上下窗口移除窗口
Ctrl + a 然后按 Shift + k 杀死当前 ShellCtrl+a 然后按 Shift + x 关闭当前窗口(不杀死 Shell),别按错按成 ctrl + x 了Ctrl + a 然后按 shift + q 关闭除了当前窗口外的所有窗口或直接 exit
Reference
How To Use Linux Screen linux后台运行之screen和nohup 为什么 Linux 终端关闭时为什么会导致在其上启动的进程退出?